/**
 * 基础表单控制器
 */
(function (app, ng) {
    'use strict';

    /**
     * 注册控制器
     */
    app.controller('basicFormCtrl', Controller);

    /**
     * 依赖项
     */
    Controller.$inject = ['$scope', '$controller', 'basicFormService']
        .concat(['$state', '$filter','$stateParams', '$uibModal', 'dialogs']);

    /**
     * 控制器
     * @param $scope 当前作用域
     * @param $controller
     * @param Service 当前服务
     * @param $state 路由状态
     * @param $stateParams 路由参数
     * @param $uibModal 模态框服务
     * @param dialogs 模态框服务
     * @constructor
     */
    function Controller($scope, $controller, Service, $state, $filter, $stateParams, $uibModal, dialogs) {
        // 初始化
        var vm = this;

        /**
         * 参数说明
         
        vm.select = 4;
        //回显数据
        vm.arr = [2,3];
        //*/
        //时间初始化
        vm.time = $filter("date")(new Date(), 'yyyy-MM-dd HH:mm:ss');
        //下拉框数据
        vm.selects = Service.selects;
        //多选下拉框数据
        vm.selectCascade = Service.selectCascade;
        //城市信息
        vm.selectCity = Service.selectCity;
        //下拉框ID
        vm.selectId = Service.selectId;
        //是否显示下拉框
        vm.show = false;
        //下拉框绑定数据
        vm.vo = [{id:2,name:"option2"},
                 {id:5,name:"option5"}];
        
        
        /**
         * 方法引用
         */
        ng.extend(vm, {
        	search:search,//搜索
        	/**
        	 * 时间控件方法
        	 */
        	monthMcmChange: monthMcmChange,//时间改变事件
        	getStartAndEndTime:getStartAndEndTime,//获取开始时间和结束时间
        	/**
        	 * bootstrap-select下拉框方法
        	 */
        	selectRadioClick: selectRadioClick,//单选下拉框点击事件
        	selectMultipleClick: selectMultipleClick,//多选下拉框点击事件
        	selectCascadeClick: selectCascadeClick,//级联下拉框点击事件
        	/**
        	 * select下拉框方法
        	 */
        	selectClick: selectClick//单选下拉框点击事件
        });
        
        function search(){
        	//var param = getStartAndEndTime();
        	//后台传参
        	Service.search(angular.copy(vm.demo));
        }
        /**
         * 时间控件
         * 详情请参考：http://www.my97.net/demo/index.htm
         * html页面基本参数说明：
         * wdate-picker ：{
         * 	el:指定当前控件或控件的ID，
         * 	dateFmt:日期显示格式
         * 	hmsMenuCfg:实现时分秒菜单自定义，格式--{ H: [1, 6], m: [5, 6], s: [15, 4] }
         * 			   格式说明 {时分秒：[步进值，每行显示值的数量]}
         * 	maxDate:'#F{$dp.$D(\'endTime\')}' 以及 minDate:'#F{$dp.$D(\'startTime\')}'的作用:
         * 	开始结束时间规则校验：起始时间不得大于结束时间
         * }
         * readonly：只读
         * placeholder：默认值
         * required：必填项
         */
        //时间改变事件
        function monthMcmChange(){
        	var time = vm.time;
        }
        
        //获取开始时间和结束时间
        function getStartAndEndTime(){
            if (vm.demo.dateStart > vm.demo.dateEnd) {
                dialogs.notify(getMessage("error.timeRangeError"));
                return;
            }
            return vm.demo;
        }
        /**
         * bootstrap-select下拉框
         * 详情请参考：http://silviomoreto.github.io/bootstrap-select/
         * html页面参数说明：
         * id:下拉框id,用于给下拉框设置相关参数(必选)
         * data-max-options：最大选择量
         * title:没有任何选择时的默认显示
         * multiple:添加此属性即为多选下拉框，不添加则为单选下拉框(注：由于添加此属性时，前台取值一直操作不成功，
         * 			故使用本下拉框时,multiple为必填项，如果使用单选下拉框，将最大选择量设置为1即可。)
         * ng-model:下拉框绑定的模型,名字随意取，用于下拉框触发change事件
         * ng-change:下拉框change事件，用于下拉框取值，必须与ng-model同时使用
         * disabled:设置禁用
         * 后台参数详情见代码注释
         */
        //下拉框样式初始化(必选)
		$('.selectpicker').selectpicker({
			//下拉框宽度
			width: '150px',
			//下拉框内容超出多少条就显示下拉框
			size: 5
		});
        
        //下拉框数据初始化(必选)
		//id:下拉框Id  selectData：下拉框数据列表
		function initSelect(id, selectData){
			/**
			 * 注：如果同页面中需要用到多次同样数据的下拉框，可直接使用‘.selectpicker’来循环要展示的数据
			 * 	  如果同页面中需要用到多次不同数据的下拉框，那么必须使用下拉框的id来循环要展示的数据。
			 */
			for (var i = 0; i < selectData.length; i++) {
				$(id).append("<option value=" +selectData[i].id + ">" + selectData[i].name + "</option>");  
			}
			$(id).selectpicker('refresh');  
			$(id).selectpicker('render'); 
			
		}
		//单选下拉框，多选下拉框数据初始化
		for(var x = 0; x < vm.selectId.length; x++){
			initSelect(vm.selectId[x], vm.selects)
		}
		//级联下拉框数据初始化
		initSelect('#cascade', vm.selectCascade);
        
		//单选数据回显(传入单个数值)
		$('#selectRadio').selectpicker('val', vm.select);
		//多选数据回显(参数类型为数组)
		$('#selectMultiple').selectpicker('val', vm.arr);
		

        /**
         * 方法声明
         */
        //单选下拉框点击事件(注：传入参数为数组类型,故取参数下标为0的数据)
        function selectRadioClick(id){
        	vm.select = id[0];
        	$('#selectRadio').selectpicker('val', vm.select);
        }
       
        //多选下拉框点击事件
        function selectMultipleClick(ids){
        	//参数数据类型为数组
        	vm.arr = ids;
        	$('#selectMultiple').selectpicker('val', vm.arr);
        }
        
        //级联下拉框点击事件
        function selectCascadeClick(id){
        	var cityId = id[0];
        	var city = [];
        	if(!cityId){
        		$('#selectCascade').empty();
        		vm.show = false;
        		return;
        	}
        	for (var i = 0; i < vm.selectCity.length; i++) {
        		if(cityId == vm.selectCity[i].id){
        			city = vm.selectCity[i].city;
        			if(city.length!=0){
        				vm.show = true;
        				$('#selectCascade').empty();
        				initSelect('#selectCascade', city)
        				return;
        			}
        		}
    		}
        }
        
        /**
         * select下拉框
         */
        //单选下拉框点击事件
        function selectClick(id){
        	vm.select = id ;
        	//用于验证多选下拉取值
        	var vo = vm.vo;
        }
        

    }
})(iApp.module(), window.angular);